package com.ruoyi.equip.service;

import com.ruoyi.common.core.domain.SelectEntity;
import com.ruoyi.equip.domain.DeviceInfo;
import com.ruoyi.equip.domain.TagData;
import com.ruoyi.equip.domain.TagInfo;
import com.ruoyi.equip.domain.entity.table.ExportParam;
import com.ruoyi.equip.domain.vo.DeviceDataVo;
import com.ruoyi.equip.domain.vo.DeviceInfoVO;
import com.ruoyi.equip.domain.vo.TagVo;
import com.ruoyi.td.entity.DeviceProperty;
import com.ruoyi.td.entity.DevicePropertyLogQueryBo;
import com.ruoyi.td.vo.ThingModelVo;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

public interface ITagInfoService {


    /**
     * 查询所有标签
     *
     * @param tagVo
     * @return
     */
    List<TagVo> selectTagInfoList(TagVo tagVo);

    /**
     * 新增标签
     */
    int add(TagVo tagVo);


    /**
     * 修改指定标签
     */
    int update(TagVo tagVo);

    /**
     * 删除指定标签
     *
     * @param tagId 标签物理ID
     */
    int deleteById(String tagId);

    /**
     * 批量删除标签
     *
     * @param tagIds 标签物理ID
     */
    void batchDelTag(List<String> tagIds);

    /**
     * 获取指定标签详情
     *
     * @param tagId 标签物理ID
     */
    TagVo getTagsDetail(String tagId);

    /**
     * 标签导出
     */
    void export(HttpServletResponse response, ExportParam exportParam);

    /**
     * 获取指定读写器下所有标签
     *
     * @param parentId 读写器物理ID
     */
    List<TagVo> getByParentId(String parentId);

    /**
     * 解绑指定标签
     *
     * @param tagId 标签物理ID
     */
    void unbindDevice(String tagId);

    /**
     * 判断指定读写器下是否存在标签
     */
    boolean hasChildOfParentId(String parentId);

    List<TagData> getPropertyHistory(DevicePropertyLogQueryBo logQueryBo);

    List<TagVo> realData(TagVo tagVo);

    List<SelectEntity> selectList();
    List<SelectEntity> selectList(String deviceId);

    List<ThingModelVo.Property> getThingModelOfId(String tagId);

    TagInfo selectTagInfo(String readerId, String tagId);
}
